Ana içeriğe geç

Merhaba, Cargo!

Cargo, Rust'ın yapılandırma sistemi ve paket yöneticisidir. Çoğu Rustacean bu aracı, Rust projelerini yönetmek için kullanır çünkü Cargo kodunuzu derler, kodunuzun bağlı olduğu kütüphaneleri indirir ve bu kütüphaneleri derler. (Kodunuzun ihtiyaç duyduğu kütüphanelere bağımlılıklar diyoruz.)

not

Bu kitap, Rust projelerinin büyük bir çoğunluğunun Cargo'yu kullandığı varsayımıyla ilerlemektedir. Eğer resmi yolla Rust'ı kurduysanız, Cargo da yüklenmiş olacaktır. Eğer Cargo'nun yüklenip yüklenmediğini kontrol etmek istiyorsanız, terminalinizde cargo --version komutunu çalıştırabilirsiniz. Eğer bir sürüm numarası görüyorsanız, Cargo yüklenmiştir!

Cargo ile Proje Oluşturma

Cargo kullanarak yeni bir proje oluşturalım ve orijinal "Merhaba, dünya!" projemizle arasındaki farklara bakalım. Projeler dizinine geri gidin ve ardından:

$ cargo new hello_cargo
$ cd hello_cargo

Bu komutlar, hello_cargo adında yeni bir dizin ve proje oluşturur.

ipucu

Git, yaygın bir sürüm kontrol sistemidir. Eğer cargo new komutunu mevcut bir Git deposunun içinde çalıştırırsanız, Git dosyaları oluşturulmaz. Bu davranışı cargo new --vcs=git komutu ile geçersiz kılabilirsiniz.

Cargo.toml

Metin düzenleyicinizde Cargo.toml dosyasını açın. İçerik şu şekilde görünecektir:

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# Daha fazla anahtar ve tanımlarını https://doc.rust-lang.org/cargo/reference/manifest.html adresinde görebilirsiniz

[dependencies]

Bu dosya, TOML (Tom's Obvious, Minimal Language) formatındadır, yani Cargo'nun yapılandırma formatıdır.

src/main.rs

Şimdi src/main.rs dosyasını açın:

fn main() {
println!("Hello, world!");
}

Cargo, tıpkı bizim yazdığımız gibi bir "Merhaba, dünya!" programı oluşturmuştur! Şimdiye kadar, aralarındaki tek fark, Cargo'nun kodu src dizinine yerleştirmiş olması ve ana dizinde bir Cargo.toml yapılandırma dosyasına sahip olmamızdır.

not

Cargo, kaynak dosyalarınızın src dizini içinde olmasını bekler. Üst düzey projenizde README dosyaları, lisans bilgileri, yapılandırma dosyaları ve kodunuzla ilgili olmayan diğer şeyleri tutabilirsiniz.

Eğer Cargo kullanmayan bir proje başlattıysanız, bu projeyi Cargo'yu kullanan bir projeye dönüştürebilirsiniz. Projedeki kodu src dizinine taşıyın ve uygun bir Cargo.toml dosyası oluşturun.

Tabii ki, aşağıda belgenin Türkçe çevirisi bulunmaktadır. Markdown formatı ve Docusaurus'un admonitions özellikleri de kullanılmıştır.

Cargo Projesini Oluşturma ve Çalıştırma

Şimdi "Merhaba, dünya!" programını Cargo ile nasıl oluşturup çalıştırabileceğimizi görelim! hello_cargo dizinindeyken, aşağıdaki komutu girerek projenizi oluşturun:

$ cargo build
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs

Bu komut, mevcut dizininiz yerine target/debug/hello_cargo (veya Windows'da target\debug\hello_cargo.exe) adlı bir yürütülebilir dosya oluşturur. Varsayılan derleme bir hata ayıklama derlemesi olduğu için, Cargo bu ikiliyi bir debug adlı dizine yerleştirir. Yürütülebilir dosyayı şu komutla çalıştırabilirsiniz:

$ ./target/debug/hello_cargo # veya Windows'ta .\target\debug\hello_cargo.exe
Hello, world!
not

Her şey yolunda giderse, "Hello, world!" terminalde görüntülenmelidir. İlk kez cargo build çalıştırdığınızda, Cargo en üst düzeyde yeni bir Cargo.lock dosyası da oluşturur. Bu dosya, projenizdeki bağımlılıkların tam sürümünü takip eder. Cargo, bu dosyanın içeriğini sizin için yönetir; manuel olarak değiştirmenize gerek yoktur.

cargo build ile bir proje oluşturduk ve ./target/debug/hello_cargo ile çalıştırdık ama aynı komutta kodu derlemek ve sonuçta oluşan yürütülebiliri çalıştırmak için cargo run kullanabiliriz:

$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
Running `target/debug/hello_cargo`
Hello, world!
ipucu

cargo run kullanmak, cargo build çalıştırmayı ve sonra ikiliye olan tüm yolu kullanmayı hatırlamaktan daha uygundur, bu yüzden çoğu geliştirici cargo run kullanır.

Ayrıca, cargo check adlı bir komut da sağlar. Bu komut, kodunuzun derlenip derlenmediğini hızlıca kontrol eder ama bir yürütülebilir dosya üretmez:

$ cargo check
Checking hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs
uyarı

Neden bir yürütülebilir dosya istemezsiniz? Genellikle, cargo check kodu yazarken sürekli çalışınızı kontrol ediyorsanız işlemleri hızlandırmak için cargo build'den çok daha hızlıdır. Birçok Rustacean, projelerinin hâlâ derlenip derlenmediğini öğrenmek için cargo check'i periyodik olarak çalıştırır.

Öğrendiklerimizi Özetleyelim

  • cargo new kullanarak bir proje oluşturabiliriz.
  • cargo build kullanarak bir proje oluşturabiliriz.
  • cargo run kullanarak bir projeyi tek adımda oluşturabilir ve çalıştırabiliriz.
  • Hatalar için bir projeyi derlemek ama bir yürütülebilir dosya üretmeksizin kontrol etmek için cargo check kullanabiliriz.
  • Oluşturulan derlemenin sonucu kodumuzla aynı dizinde saklanmaz, Cargo bunu target/debug dizinine yerleştirir.

Yayın İçin Oluşturma

Projniz nihayet yayına hazır olduğunda, optimizasyonlarla derlemek için cargo build --release komutunu kullanabilirsiniz. Bu komut, yürütülebilir bir dosyayı target/release dizinine, target/debug yerine oluşturur. Optimizasyonlar Rust kodunuzun daha hızlı çalışmasını sağlar, fakat açık tutulduğunda programınızın derlenme süresini uzatır. İşte bu yüzden iki farklı profil vardır: biri geliştirme için, hızlı ve sık sık yeniden derlemek istediğinizde; diğeri ise kullanıcıya vereceğiniz, tekrar tekrar derlenmeyecek ve olabildiğince hızlı çalışacak olan nihai programı oluşturmak için. Kodunuzun çalışma süresini ölçüyorsanız, cargo build --release çalıştırdığınızdan ve target/release içindeki yürütülebilir dosyayla ölçüm yaptığınızdan emin olun.

ipucu

Eğer kodunuzun çalışma süresini ölçüyorsanız, mutlaka cargo build --release komutuyla derleme yapın ve target/release dizinindeki yürütülebilir dosyayı kullanarak ölçüm yapın.

Cargo'nun Konvansiyon Olarak Kullanımı

Basit projelerde, Cargo'nun rustc kullanmaktan sağladığı çok fazla bir avantajı yoktur, fakat programlarınız daha karmaşık hale geldikçe değerini kanıtlayacaktır. Programlar birden fazla dosyaya sahip olmaya başladığında veya bir bağımlılığa ihtiyaç duyduğunda, derlemeyi Cargo'nun koordine etmesi çok daha kolaydır.

bilgi

Basit olsa bile hello_cargo projesi, Rust kariyerinizin geri kalanında kullanacağınız birçok gerçek aracı kullanmaktadır. Aslında, mevcut projeler üzerinde çalışmak için aşağıdaki komutları kullanarak Git ile kodu kontrol edebilir, o projenin dizinine geçebilir ve derleme yapabilirsiniz:

$ git clone example.org/someproject
$ cd someproject
$ cargo build

Cargo hakkında daha fazla bilgi için, belgelerini kontrol edin.